package cn.com.bob.messageboard.utils;

import cn.com.bob.messageboard.domain.Message;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.awt.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;

/**
 * @Author Bob
 * @Version：1.0
 */
public class ExcelExportUtil {
    /**
     * 导出excel文件
     * @param persons: 留言列表
     * @param fileName: 文件地址
     * @param username: 导出人
     * @return void
     */
    public  static  void exportExcelByWater(List<Message> persons, String fileName, String username) throws IOException {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("筛选后数据");

        // 创建表头行
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("留言人");
        headerRow.createCell(1).setCellValue("留言时间");
        headerRow.createCell(2).setCellValue("留言内容");


        // 写入数据行
        for (int i = 0; i < persons.size(); i++) {
            Message person = persons.get(i);
            Row dataRow = sheet.createRow(i + 1);
            dataRow.createCell(0).setCellValue(person.getUsername());
            dataRow.createCell(1).setCellValue(person.getCreateTime());
            dataRow.createCell(2).setCellValue(person.getContent());

        }

        // 自动调整列宽以优化显示效果
        for (int i = 0; i < 10; i++) {
            sheet.autoSizeColumn(i);
        }
        // 生成水印
        byte[] waterMarkBytes = WaterUtils.createWaterMark(username + DateFormat.getDateInstance().format(new Date()), 200, 150, new java.awt.Color(255, 0, 0, 100)
                , new Font("微软雅黑", Font.BOLD, 20));

        // 插入水印
        WaterUtils.insertWaterRemark(sheet, waterMarkBytes);

        // 将工作簿保存为文件
        try (FileOutputStream outputStream = new FileOutputStream(fileName)) {
            workbook.write(outputStream);
            System.out.println("筛选后的数据成功导出至: " + fileName);
        }
    }
}
